SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[paEjecutarReubicacionDeAgente]
@idCola INT,
@SubservicioDeLaNorma INT OUTPUT,
@EsForzado BIT
AS
SET NOCOUNT ON
DECLARE @Agente INT
DECLARE @Plaza INT
DECLARE @Fecha DATETIME
DECLARE @Organizacion INT
DECLARE @REsponsable INT
DECLARE @Fecha1 DATETIME
DECLARE @Fecha2 DATETIME
DECLARE @FechaTermino DATETIME
DECLARE @SitRev INT
DECLARE @Nivel INT
DECLARE @modalidad INT
DECLARE @zona INT
DECLARE @cargosalarial INT
DECLARE @Licencia INT
DECLARE @cantidadhoras INT
DECLARE @movimiento INT
DECLARE @estado INT
DECLARE @observaciones VARCHAR(255)
DECLARE @CausaAlta INT
DECLARE @Diagnostico VARCHAR(1000)
DECLARE @Destino INT
DECLARE @NroOrden INT
DECLARE @SituacionExtraordinaria  INT
DECLARE @SituacionLaboral INT
DECLARE @SituacionRevista INT

BEGIN tran

DECLARE @LicenciaA INT
DECLARE @sitlabA INT
DECLARE @sitextA INT

--Saco los valores de la ColaDeMovimientos correspondientes a idCola
SELECT @Agente = Agente, @Plaza = Plaza, @Fecha = Fecha, @Organizacion = Organizacion, @Responsable = Responsable, @Fecha1 = Fecha1,
@Fecha2 = Fecha2, @SitRev = SitRev, @Nivel = Nivel, @Modalidad = Modalidad, @Zona = Zona, @cargosalarial = cargosalarial, @licencia = licencia,
@cantidadhoras = cantidadhoras, @movimiento = movimiento, @Estado = Estado, @Observaciones = observaciones, @CausaAlta = CausaAlta, 
@FechaTermino = FechaTermino
FROM tb_ColaDeMovimientos 
WHERE idCola = @idCola

-- Si el Estado es Rechazado, Ejecutado o Ejecutado Forzado
IF @Estado = 2 or @Estado = 4 or @Estado = 5
	return
--print 'sigue PASO 1'
--Como es un Alta de Licencia la tabla de relacion solo tiene una Plaza
DECLARE @idPlaza INT
DECLARE @SubServicio INT

SELECT @idPlaza = idPlaza, @SubServicio = Servicio, @Destino = PlazaDestino FROM tb_PlazasDeMovimiento WHERE idCola = @idCola

DECLARE @Servicio INT
SELECT @Servicio = ServicioAgente, @modalidad = modalidad, @nivel = nivel FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio
SELECT @SituacionRevista = SituacionRevista FROM tb_ServiciosAgentes WHERE idServicioAgente = @Servicio

SELECT @LicenciaA = licencia, @sitlabA = situacionlaboral, @sitextA = situacionextraordinaria FROM tb_SubServiciosAgentes WHERE idsubServicio = @SubServicio

SELECT @NroOrden = (SELECT MAX(NroOrden9) FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio)+1

--Tengo que ver si es una reubicacion histórica
IF exists (SELECT * FROM tb_SubServiciosAgentes WHERE ServicioAgente = @servicio and ((FechaAlta > @fecha1 and FechaBaja is NULL) or (FechaAlta < @fecha1 and FechaBaja > @fecha1 and FechaBaja is not NULL)) )
BEGIN	
print 'es HISTORICA'
	DECLARE @F1 DATETIME
	DECLARE @F2 DATETIME
	-- Si el SS y el S tienen la misma fecha de alta
	IF (SELECT FechaAlta FROM tb_ServiciosAgentes WHERE idServicioAgente = (SELECT ServicioAgente FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio)) = @Fecha1
	BEGIN
		print 'Entra a Cambiar todas las plazas a lo largo del Servicio'
		DECLARE @PlazaAnterior INT
		SELECT @PlazaAnterior = Plaza FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio
		SELECT @SituacionRevista = SituacionRevista FROM tb_ServiciosAgentes WHERE idServicioAgente = @Servicio
		IF @SituacionRevista = 1 or @SituacionRevista = 2
			UPDATE tb_Plazas SET duenoactual = NULL, sitrevduenoactual = NULL WHERE idPlaza = @PlazaAnterior
		ELSE 	
			UPDATE tb_Plazas SET ultimodocente = NULL WHERE idPlaza = @PlazaAnterior
		UPDATE tb_SubServiciosAgentes SET plaza = @Destino WHERE ServicioAgente = @Servicio
	END
	ELSE
	BEGIN
		SELECT @F1 = FechaAlta, @F2 = FechaBaja, @SituacionLaboral = SituacionLaboral, @SituacionExtraordinaria = SituacionExtraordinaria FROM tb_SubServiciosAgentes WHERE FechaAlta <= @Fecha1 and FechaBaja >= @Fecha1 and ServicioAgente = @Servicio	
		print 'FechaAlta: '+convert(varchar, @F1)
		print 'FechaBaja: '+convert(varchar, @F2)
		print 'Fecha1: '+convert(varchar, @Fecha1)
		print 'F2: '+convert(varchar, @F2)
		-- SELECT @F2 =  min(FechaAlta) FROM tb__SubserviciosAgentes WHERE ServicioAgente = @Servicio and FechaAlta > @Fecha1
		
		IF @Fecha1 > @F1 and @F2 > @Fecha1
		BEGIN
			--print 'Entro aca...Servicio='+convert(varchar, @
			DECLARE @FFecha1 DATETIME
			SELECT @FFecha1 = DATEADD(DAY,-1,@Fecha1)
			DECLARE @idss INT
			print 'FFecha1: '+convert(varchar, @FFecha1)
			INSERT INTO tb_SubServiciosAgentes (Baja, CodEnfermedad, EntidadCertificadora, EstadoLiqExt, FechaAlta, FechaBaja, FechaCertificado,
			FechaTermino, Licencia, Modalidad, Movimiento, Nivel, NormaFin, NormaInicio, NroCertificado, NroOrden9, Plaza, ServicioAgente, SituacionExtraordinaria,
			SituacionLaboral, TramiteAlta, TramiteBaja, Zona)
			VALUES ('S', NULL, NULL, 1, @Fecha1, @F2, NULL, NULL, @Licencia, @Modalidad, 4, @Nivel, NULL, NULL, NULL, @NroOrden, @Destino, @Servicio, @SituacionExtraordinaria, @SituacionLaboral, NULL, NULL, 0)
			SELECT @idss = @@IDENTITY
			print 'Inserta SS// Fecha1='+convert(varchar, @Fecha1)+' FFecha1='+convert(varchar, @FFecha1)
			UPDATE tb_SubServiciosAgentes SET FechaBaja = @FFecha1 WHERE FechaAlta<@Fecha1 and FechaBaja>@Fecha1 and ServicioAgente = @Servicio and idSubServicio <> @idss
			print 'Actualiza SS'
		END
		ELSE
			print 'No entra'
		UPDATE tb_SubServiciosAgentes SET Plaza = @Destino WHERE ServicioAgente = @Servicio and FechaAlta >= @Fecha1
	END
END
ELSE
BEGIN
SELECT @SituacionLaboral = 5
SELECT @SituacionExtraordinaria = 1

print 'Baja subservicio anterior'
-- Primero doy de baja el subservicio actual del agente

IF Exists(SELECT * FROM tb_SubServiciosAgentes WHERE FechaAlta = @fecha1 And ServicioAgente = @Servicio And FechaBaja Is NULL) 
BEGIN
	DECLARE @idss2 INT
	SELECT @idss2 = idSubServicio FROM tb_SubServiciosAgentes WHERE FechaAlta = @fecha1 And ServicioAgente = @Servicio And FechaBaja Is NULL
	UPDATE tb_SubServiciosAgentes SET Plaza = @Destino WHERE idSubServicio = @idss2
END
ELSE
BEGIN
IF Exists(SELECT * FROM tb_SubServiciosAgentes WHERE FechaAlta=@Fecha1 And ServicioAgente = @Servicio And FechaBaja Is Not NULL)
	UPDATE tb_SubServiciosAgentes SET Plaza = @Destino WHERE idSubServicio = @idss 
ELSE 
BEGIN
UPDATE tb_SubServiciosAgentes SET baja = 'S', fechabaja = DATEADD(DAY, -1, @Fecha1) WHERE idSubServicio = @SubServicio

-- Luego inserto el subservicio nuevo correspondiente a la reubicacion
-- Hay que poner todos los atributos de del subservicio anterior
print 'Sube nuevo subservicio'
 INSERT INTO tb_SubServiciosAgentes (Baja, CodEnfermedad, EntidadCertificadora, EstadoLiqExt, FechaAlta, FechaBaja, FechaCertificado,
  FechaTermino, Licencia, Modalidad, Movimiento, Nivel, NormaFin, NormaInicio, NroCertificado, NroOrden9, Plaza, ServicioAgente, SituacionExtraordinaria,
  SituacionLaboral, TramiteAlta, TramiteBaja, Zona)
  VALUES ('N', NULL, NULL, 1, @Fecha1 , NULL, NULL, NULL, @LicenciaA, @Modalidad, 4, @Nivel, NULL, NULL, NULL, @NroOrden, @Destino, @Servicio, @SitextA, @SitLabA, NULL, NULL, 0)
END
END
END

IF @SituacionRevista = 1 or @SituacionRevista = 2
	UPDATE tb_Plazas SET duenoActual = @Agente WHERE idPlaza = @Destino
ELSE
	UPDATE tb_Plazas SET ultimoDocente = @Agente WHERE idPlaza = @Destino

-- actualizo el estado de la cola en Ejecutado OK
UPDATE tb_ColaDeMovimientos SET Estado = CASE WHEN @EsForzado = 0 THEN 4 ELSE 5 END, NTUserEjecutor = SYSTEM_USER, FechaEjecucion = GETDATE()  WHERE idCola = @idCola

SELECT @SubServicioDeLaNorma = @SubServicio

IF @@ERROR = 0
	COMMIT TRANSACTION
ELSE
	ROLLBACK TRANSACTION
GO
GRANT EXECUTE ON  [dbo].[paEjecutarReubicacionDeAgente] TO [PersonalDocente]
GO
